package 滑动窗口;

import java.util.HashMap;
import java.util.Map;

/**
 * @author TTDB
 * @create 2025/9/13
 */
public class lengthOfLongestSubstring {
     public int lengthOfLongestSubstring(String S) {
         int n = S.length(), ans = 0;
         Map<Character, Integer> map = new HashMap<>();//使用HashMap记录字符出现的次数
         for(int end = 0, start = 0; end < n; end++){
             char c = S.charAt(end);
             map.put(c, map.getOrDefault(c, 0) + 1);//进入滑动窗口字符+1
             while(map.get(c) > 1){//如果当前字符超过1次，则缩小滑动窗口，直至该字符次数小于等于1
                 char d = S.charAt(start);
                 map.put(d, map.getOrDefault(d, 0) - 1);
                 start++;
             }
             ans = Math.max(ans, end - start + 1);
         }
         return ans;
    }
}
